// 变量申明 ts 的写法
//  var  变量名 :变量类型=值
// 例如
// var uname:string = "Runoob";
// console.log(uname);
// 但是你申明之后 不赋值操作 就会直接变成undefined
// 例如
// var app:string;
// console.log(app);
// 你申明一个变量却不指向什么类型的值 那么就会产生一个任意类型的值
//  var app=99;
//  console.log(typeof app);
//  声明变量没有设置类型和初始值，类型可以是任意类型，默认初始值为 undefined：
//  var [变量名];
//  例如：
//  var uname;
// var uname:string='Runoob';
// var score1:number = 50;
// var score2:number = 42.50
// var sum = score1 + score2
// console.log("名字: "+ uname)
// console.log("第一个科目成绩: "+score1)
// console.log("第二个科目成绩: "+score2)
// console.log("总成绩: "+sum)
// 变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名。
// TypeScript 遵循强类型，如果将不同的类型赋值给变量会编译错误，如下实例：
// var num:number = "hello"     // 这个代码会编译错误
// 类型语言 设计的时候 就 可以实现从一种类型到另外一种类型的改变
//  例如
//  var str='1';
//  console.log(typeof str);
//  var  str2:number=<number> <any> str;
//  console.log(typeof str2);
//  还有就是 设计者考虑到如何判断 这个类型是不是满足了 当前的类型设置
// TypeScript 是怎么确定单个断言是否足够
// 当 S 类型是 T 类型的子集，或者 T 类型是 S 类型的子集时，S 能被成功断言成 T。这是为了在进行类型断言时提供额外的安全性，完全毫无根据的断言是危险的，如果你想这么做，你可以使用 any。
// 它之所以不被称为类型转换，是因为转换通常意味着某种运行时的支持。但是，类型断言纯粹是一个编译时语法，同时，它也是一种为编译器提供关于如何分析代码的方法。
// 编译后，以上代码会生成如下 JavaScript 代码：
// var str = '1';
// var str2 = str;  //str、str2 是 string 类型
// console.log(str2);
//  本来想做一个牛逼一点的类型推断 但是好像没有那么吊  直接面向所有类型了
// 类型推断
// 当类型没有给出时，TypeScript 编译器利用类型推断来推断类型。
// 如果由于缺乏声明而不能推断出类型，那么它的类型被视作默认的动态 any 类型。
// var num = 2;    // 类型推断为 number
// console.log("num 变量的值为 "+num); 
// num = "12";    // 编译错误
// console.log(num);
// var global_num = 12          // 全局变量
// class Numbers { 
//    num_val = 13;             // 实例变量
//    static sval = 10;         // 静态变量
//    storeNum():void { 
//       var local_num = 14;    // 局部变量
//    } 
// } 
// console.log("全局变量为: "+global_num)  
// console.log(Numbers.sval)   // 静态变量
// var obj = new Numbers(); 
// console.log("实例变量: "+obj.num_val)
// 以上代码使用 tsc 命令编译为 JavaScript 代码为：
// var global_num = 12; // 全局变量
// var Numbers = /** @class */ (function () {
//     function Numbers() {
//         this.num_val = 13; // 实例变量
//     }
//     Numbers.prototype.storeNum = function () {
//         var local_num = 14; // 局部变量
//     };
//     Numbers.sval = 10; // 静态变量
//     return Numbers;
// }());
// console.log("全局变量为: " + global_num);
// console.log(Numbers.sval); // 静态变量
// var obj = new Numbers();
// console.log("实例变量: " + obj.num_val);
// 执行以上 JavaScript 代码，输出结果为：
// 全局变量为: 12
// 10
// 实例变量: 13
// 如果我们在方法外部调用局部变量 local_num，会报错：
// error TS2322: Could not find symbol 'local_num'.
